используется для указания на то,
Ключевое слово _property (свойство)
используется для указания на то, что метод
получения и/или установки реализует
свойство управляемого класса. В отличие от
элемента данных (называемого также полем),
который однообразен и негибок, свойство
может быть доступно для чтения и записи,
либо только для чтения и только для записи,
может быть реализовано как обычная
переменная или как вычисляемое значение.
Например, свойство только для чтения должно
быть реализовано методом get_, но не методом
set_. Свойство доступно другим программам,
написанным на любых языках .NET, посредством
использования обычного синтаксиса доступа
к элементам данных этого языка, как если бы
свойство было обычным элементом данных (точнее
псевдоэлементом данных). Это
продемонстрировано в следующем фрагменте
кода, в котором pmcwp->someProperty используется
так, как если бы оно было элементом данных с
именем someProperty. Фактически такого элемента
данных не существует, но то, что класс
содержит методы get_someProperty и set_someProperty,
объявленные с ключевым словом _property (свойство),
делает возможным такой способ доступа. В
действительности класс содержит
защищенный (protected) элемент данных m_someProperty,
но это уже подробности реализации,
инкапсулированные в компоненте. Свойство
компонента в .NET похоже на свойства OLE-автоматизации
в компонентах ActiveX или свойства компонентов
(bean) в JavaBean.
Другой интересной чертой управляемых
свойств, отсутствующей у элементов данных,
является то, что вы можете проверить
приемлемость аргумента метода set_ и, в
случае, если значение аргумента
некорректно, вызвать исключение. Это
помогает в создании корректно работающих
компонентов.
//PropertyExample.срр
#using <mscorlib.dll>
using namespace System;
// использовать пространство имен Система;
_gc class ManagedClassWithProperty
// класс сборщика мусора ManagedClassWithProperty
{
public:
ManagedClassWithProperty() : m_someProperty(0) {}
_property int get_someProperty() // свойство -
// должно быть "get_"
{
return m_someProperty;
}
_property void set_someProperty( // свойство
int propertyValue) // должно быть "set__"
{
m_someProperty = propertyValue;
}
protected: // защищенный
int m_someProperty; // можно реализовать как элемент данных
};
void main() {
ManagedClassWithProperty* pmcwp = new ManagedClassWithProperty;
pmcwp->someProperty = 7; // псевдоэлемент данных
Console::WriteLine(pmcwp->someProperty) ;
}
Вышеприведенная программа выведет:
7
Содержание раздела